import { ref } from 'vue'
import { defineStore } from 'pinia'
import type { Ref} from 'vue'

//可以写到types.ts中 然后导入 type从路径中 也可以直接在这里写
interface iUserInfo{
//   loginstate:boolean;
  token:string;
//   userid:string;
}
//hooks
export const useUserStore = defineStore('user', () => {  //导出  用的时候导入
//   const loginstate:Ref<boolean> = ref(localStorage.getItem('loginstate') == 'true')  //返回布尔类型 防止刷新后初始化 本地存储的loginstate
  const token:Ref<string> = ref(localStorage.getItem('token') || '')  //为什么必须在这里设置 默认值 否则不生效下面
//   const userid:Ref<string> = ref(localStorage.getItem('userid') || '') // 如果本地有值就取 否则没值取空字符串

  function userInfoFn(userinfo:iUserInfo) {
    // 字符串转成布尔类型  去本地的是防止刷新后初始化
    // loginstate.value = Boolean(localStorage.getItem('loginstate')) || false //userinfo.loginstate
    // token.value = localStorage.getItem('token') || ''
    // userid.value = localStorage.getItem('userid') || '' //userinfo.userid

    // loginstate.value = userinfo.loginstate //userinfo.loginstate
    token.value = userinfo.token
    // userid.value = userinfo.userid 

    //刷新还是清空了bug 要在这个页面写本地存储
    //把数据存到本地存储中 不使用插件  本地只能存字符串格式
         //目的，一刷新页面全局数据就会清除 得重新登陆  所以要存到本地存储中 
         //要把前端登陆的用户信息参数 存到本地中  否则loginstate.value本来就是空 本地存的也是空
        //   localStorage.setItem('loginstate',String(userinfo.loginstate) ) //(loginstate.value))  //不能存布尔类型转成字符串
          localStorage.setItem('token',userinfo.token)//res.data.token) 如果存返回值则没有清除的功能 要用全局里的数据 退出登陆后清空全局的数据时同时清除本地存储的
        //   localStorage.setItem('userid',userinfo.userid)//res.data.userid)
        //   console.log(userInfo.loginstate);  存储全局pina成功后可以查看到数据    
  }

  return {  token, userInfoFn }  //暴露出去 外部使用
  }
)
